package com.ruoyi.report_sj.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.report_sj.domain.ReportSjphbsjBaDetail;
import com.ruoyi.report_sj.mapper.ReportSjphbsjBaDetailMapper;
import com.ruoyi.syrw.annotation.FIllBasicInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.report_sj.domain.bo.ReportSjPhbsjsyjcjlBsInfoBo;
import com.ruoyi.report_sj.domain.vo.ReportSjPhbsjsyjcjlBsInfoVo;
import com.ruoyi.report_sj.domain.ReportSjPhbsjsyjcjlBsInfo;
import com.ruoyi.report_sj.mapper.ReportSjPhbsjsyjcjlBsInfoMapper;
import com.ruoyi.report_sj.service.IReportSjPhbsjsyjcjlBsInfoService;

import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
 * 砂浆配合比设计试验检测记录Service业务层处理
 *
 * @author zyb
 * @date 2024-05-29
 */
@RequiredArgsConstructor
@Service
public class ReportSjPhbsjsyjcjlBsInfoServiceImpl implements IReportSjPhbsjsyjcjlBsInfoService {

    private final ReportSjPhbsjsyjcjlBsInfoMapper baseMapper;
    private final ReportSjphbsjBaDetailMapper detailMapper;

    /**
     * 查询砂浆配合比设计试验检测记录
     */
    @Override
    @FIllBasicInfo
    public ReportSjPhbsjsyjcjlBsInfoVo queryById(Long excelId) {
        ReportSjPhbsjsyjcjlBsInfoVo vo = baseMapper.selectVoById(excelId);
        List<ReportSjphbsjBaDetail> detailList = detailMapper.selectListByExcelId(excelId);
        if (detailList == null || detailList.size() == 0) {
            for (int i = 0; i <= 2; i++) {
                ReportSjphbsjBaDetail detail = new ReportSjphbsjBaDetail();
                detail.setExcelId(excelId);
                detailMapper.insert(detail);
                detailList.add(detail);
            }
        }
        vo.setDetailList(detailList);
        return vo;
    }

    /**
     * 查询砂浆配合比设计试验检测记录列表
     */
    @Override
    public TableDataInfo<ReportSjPhbsjsyjcjlBsInfoVo> queryPageList(ReportSjPhbsjsyjcjlBsInfoBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<ReportSjPhbsjsyjcjlBsInfo> lqw = buildQueryWrapper(bo);
        Page<ReportSjPhbsjsyjcjlBsInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }

    /**
     * 查询砂浆配合比设计试验检测记录列表
     */
    @Override
    public List<ReportSjPhbsjsyjcjlBsInfoVo> queryList(ReportSjPhbsjsyjcjlBsInfoBo bo) {
        LambdaQueryWrapper<ReportSjPhbsjsyjcjlBsInfo> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }

    private LambdaQueryWrapper<ReportSjPhbsjsyjcjlBsInfo> buildQueryWrapper(ReportSjPhbsjsyjcjlBsInfoBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<ReportSjPhbsjsyjcjlBsInfo> lqw = Wrappers.lambdaQuery();
        lqw.eq(bo.getPage() != null, ReportSjPhbsjsyjcjlBsInfo::getPage, bo.getPage());
        lqw.eq(bo.getTotalPage() != null, ReportSjPhbsjsyjcjlBsInfo::getTotalPage, bo.getTotalPage());
        lqw.eq(StringUtils.isNotBlank(bo.getJiancdwmc()), ReportSjPhbsjsyjcjlBsInfo::getJiancdwmc, bo.getJiancdwmc());
        lqw.eq(StringUtils.isNotBlank(bo.getJilbh()), ReportSjPhbsjsyjcjlBsInfo::getJilbh, bo.getJilbh());
        lqw.eq(StringUtils.isNotBlank(bo.getGongcmc()), ReportSjPhbsjsyjcjlBsInfo::getGongcmc, bo.getGongcmc());
        lqw.eq(StringUtils.isNotBlank(bo.getGongcbwyt()), ReportSjPhbsjsyjcjlBsInfo::getGongcbwyt, bo.getGongcbwyt());
        lqw.eq(StringUtils.isNotBlank(bo.getYangpxx()), ReportSjPhbsjsyjcjlBsInfo::getYangpxx, bo.getYangpxx());
        lqw.eq(StringUtils.isNotBlank(bo.getYangpmc()), ReportSjPhbsjsyjcjlBsInfo::getYangpmc, bo.getYangpmc());
        lqw.eq(StringUtils.isNotBlank(bo.getYangpbh()), ReportSjPhbsjsyjcjlBsInfo::getYangpbh, bo.getYangpbh());
        lqw.eq(StringUtils.isNotBlank(bo.getYangpsl()), ReportSjPhbsjsyjcjlBsInfo::getYangpsl, bo.getYangpsl());
        lqw.eq(StringUtils.isNotBlank(bo.getYangpzt()), ReportSjPhbsjsyjcjlBsInfo::getYangpzt, bo.getYangpzt());
        lqw.eq(bo.getYangplysj() != null, ReportSjPhbsjsyjcjlBsInfo::getYangplysj, bo.getYangplysj());
        lqw.eq(StringUtils.isNotBlank(bo.getShiyjcrq()), ReportSjPhbsjsyjcjlBsInfo::getShiyjcrq, bo.getShiyjcrq());
        lqw.eq(StringUtils.isNotBlank(bo.getShiytjwd()), ReportSjPhbsjsyjcjlBsInfo::getShiytjwd, bo.getShiytjwd());
        lqw.eq(StringUtils.isNotBlank(bo.getShiytjsd()), ReportSjPhbsjsyjcjlBsInfo::getShiytjsd, bo.getShiytjsd());
        lqw.eq(StringUtils.isNotBlank(bo.getJiancyj()), ReportSjPhbsjsyjcjlBsInfo::getJiancyj, bo.getJiancyj());
        lqw.eq(StringUtils.isNotBlank(bo.getPandyj()), ReportSjPhbsjsyjcjlBsInfo::getPandyj, bo.getPandyj());
        lqw.eq(StringUtils.isNotBlank(bo.getZhuyyqsbmcjbh()), ReportSjPhbsjsyjcjlBsInfo::getZhuyyqsbmcjbh, bo.getZhuyyqsbmcjbh());
        lqw.eq(StringUtils.isNotBlank(bo.getFujsm()), ReportSjPhbsjsyjcjlBsInfo::getFujsm, bo.getFujsm());
        lqw.eq(StringUtils.isNotBlank(bo.getJianc()), ReportSjPhbsjsyjcjlBsInfo::getJianc, bo.getJianc());
        lqw.eq(StringUtils.isNotBlank(bo.getJil()), ReportSjPhbsjsyjcjlBsInfo::getJil, bo.getJil());
        lqw.eq(StringUtils.isNotBlank(bo.getFuh()), ReportSjPhbsjsyjcjlBsInfo::getFuh, bo.getFuh());
        lqw.eq(bo.getRiq() != null, ReportSjPhbsjsyjcjlBsInfo::getRiq, bo.getRiq());
        lqw.eq(StringUtils.isNotBlank(bo.getLingq()), ReportSjPhbsjsyjcjlBsInfo::getLingq, bo.getLingq());
        lqw.eq(StringUtils.isNotBlank(bo.getShajzl()), ReportSjPhbsjsyjcjlBsInfo::getShajzl, bo.getShajzl());
        lqw.eq(StringUtils.isNotBlank(bo.getYanghtj()), ReportSjPhbsjsyjcjlBsInfo::getYanghtj, bo.getYanghtj());
        lqw.eq(StringUtils.isNotBlank(bo.getShejqddj()), ReportSjPhbsjsyjcjlBsInfo::getShejqddj, bo.getShejqddj());
        lqw.eq(StringUtils.isNotBlank(bo.getBanzff()), ReportSjPhbsjsyjcjlBsInfo::getBanzff, bo.getBanzff());
        lqw.eq(StringUtils.isNotBlank(bo.getShipqd()), ReportSjPhbsjsyjcjlBsInfo::getShipqd, bo.getShipqd());
        lqw.eq(StringUtils.isNotBlank(bo.getShejcd()), ReportSjPhbsjsyjcjlBsInfo::getShejcd, bo.getShejcd());
        lqw.eq(StringUtils.isNotBlank(bo.getBiaozc()), ReportSjPhbsjsyjcjlBsInfo::getBiaozc, bo.getBiaozc());
        lqw.eq(StringUtils.isNotBlank(bo.getYanghfs()), ReportSjPhbsjsyjcjlBsInfo::getYanghfs, bo.getYanghfs());
        lqw.eq(StringUtils.isNotBlank(bo.getYanghhjwd()), ReportSjPhbsjsyjcjlBsInfo::getYanghhjwd, bo.getYanghhjwd());
        lqw.eq(StringUtils.isNotBlank(bo.getYanghhjsd()), ReportSjPhbsjsyjcjlBsInfo::getYanghhjsd, bo.getYanghhjsd());
        lqw.eq(StringUtils.isNotBlank(bo.getShuinppjqddj()), ReportSjPhbsjsyjcjlBsInfo::getShuinppjqddj, bo.getShuinppjqddj());
        lqw.eq(StringUtils.isNotBlank(bo.getShuincd()), ReportSjPhbsjsyjcjlBsInfo::getShuincd, bo.getShuincd());
        lqw.eq(StringUtils.isNotBlank(bo.getChanjlmc1()), ReportSjPhbsjsyjcjlBsInfo::getChanjlmc1, bo.getChanjlmc1());
        lqw.eq(StringUtils.isNotBlank(bo.getChanjlyl1()), ReportSjPhbsjsyjcjlBsInfo::getChanjlyl1, bo.getChanjlyl1());
        lqw.eq(StringUtils.isNotBlank(bo.getChanjlmc2()), ReportSjPhbsjsyjcjlBsInfo::getChanjlmc2, bo.getChanjlmc2());
        lqw.eq(StringUtils.isNotBlank(bo.getChanjlyl2()), ReportSjPhbsjsyjcjlBsInfo::getChanjlyl2, bo.getChanjlyl2());
        lqw.eq(StringUtils.isNotBlank(bo.getXijlcd()), ReportSjPhbsjsyjcjlBsInfo::getXijlcd, bo.getXijlcd());
        lqw.eq(StringUtils.isNotBlank(bo.getXijlbgmd()), ReportSjPhbsjsyjcjlBsInfo::getXijlbgmd, bo.getXijlbgmd());
        lqw.eq(StringUtils.isNotBlank(bo.getXidms()), ReportSjPhbsjsyjcjlBsInfo::getXidms, bo.getXidms());
        lqw.eq(StringUtils.isNotBlank(bo.getXijllx()), ReportSjPhbsjsyjcjlBsInfo::getXijllx, bo.getXijllx());
        lqw.eq(StringUtils.isNotBlank(bo.getWaicjmc1()), ReportSjPhbsjsyjcjlBsInfo::getWaicjmc1, bo.getWaicjmc1());
        lqw.eq(StringUtils.isNotBlank(bo.getWaicjbl1()), ReportSjPhbsjsyjcjlBsInfo::getWaicjbl1, bo.getWaicjbl1());
        lqw.eq(StringUtils.isNotBlank(bo.getWaicjmc2()), ReportSjPhbsjsyjcjlBsInfo::getWaicjmc2, bo.getWaicjmc2());
        lqw.eq(StringUtils.isNotBlank(bo.getWaicjbl2()), ReportSjPhbsjsyjcjlBsInfo::getWaicjbl2, bo.getWaicjbl2());
        lqw.eq(bo.getSsyrq() != null, ReportSjPhbsjsyjcjlBsInfo::getSsyrq, bo.getSsyrq());
        lqw.eq(bo.getQsyrq() != null, ReportSjPhbsjsyjcjlBsInfo::getQsyrq, bo.getQsyrq());
        lqw.eq(bo.getEsyrq() != null, ReportSjPhbsjsyjcjlBsInfo::getEsyrq, bo.getEsyrq());
        return lqw;
    }

    /**
     * 新增砂浆配合比设计试验检测记录
     */
    @Override
    public Boolean insertByBo(ReportSjPhbsjsyjcjlBsInfoBo bo) {
        ReportSjPhbsjsyjcjlBsInfo add = BeanUtil.toBean(bo, ReportSjPhbsjsyjcjlBsInfo.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setExcelId(add.getExcelId());
        }
        return flag;
    }

    /**
     * 修改砂浆配合比设计试验检测记录
     */
    @Override
    public Boolean updateByBo(ReportSjPhbsjsyjcjlBsInfoBo bo) {
        ReportSjPhbsjsyjcjlBsInfo update = BeanUtil.toBean(bo, ReportSjPhbsjsyjcjlBsInfo.class);
        validEntityBeforeSave(update);
//        List<ReportSjphbsjBaDetail> detailList = bo.getDetailList();
        //更新子表
        detailMapper.insertOrUpdateBatch(bo.getDetailList());
        return baseMapper.updateById(update) > 0;
    }

    /**
     * 保存前的数据校验
     */
    private void validEntityBeforeSave(ReportSjPhbsjsyjcjlBsInfo entity){
        //TODO 做一些数据校验,如唯一约束
    }

    /**
     * 批量删除砂浆配合比设计试验检测记录
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO 做一些业务上的校验,判断是否需要校验
        }
        return baseMapper.deleteBatchIds(ids) > 0;
    }
}
